home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / demos / retinarave / pt-playa1200.s < prev    next >
Text File  |  1980-01-03  |  23KB  |  1,183 lines

  1. ;********************************************
  2. ;* ----- Protracker V1.1B Playroutine ----- *
  3. ;* Lars "Zap" Hamre/Amiga Freelancers 1991  *
  4. ;* Bekkeliveien 10, N-2010 STRØMMEN, Norway *
  5. ;********************************************
  6.  
  7. ; VBlank Version 2:
  8. ; Call mt_init to initialize the routine, then call mt_music on
  9. ; each vertical blank (50 Hz). To end the song and turn off all
  10. ; voices, call mt_end.
  11.  
  12. ; This playroutine is not very fast, optimized or well commented,
  13. ; but all the new commands in PT1.1A should work.
  14. ; If it's not good enough, you'll have to change it yourself.
  15. ; We'll try to write a faster routine soon...
  16.  
  17. ; Changes from V1.0C playroutine:
  18. ; - Vibrato depth changed to be compatible with Noisetracker 2.0.
  19. ;   You'll have to double all vib. depths on old PT modules.
  20. ; - Funk Repeat changed to Invert Loop.
  21. ; - Period set back earlier when stopping an effect.
  22.  
  23. DMAWait = 300 ; Set this as low as possible without losing low notes.
  24.  
  25. n_note        EQU    0  ; W
  26. n_cmd        EQU    2  ; W
  27. n_cmdlo        EQU    3  ; B
  28. n_start        EQU    4  ; L
  29. n_length    EQU    8  ; W
  30. n_loopstart    EQU    10 ; L
  31. n_replen    EQU    14 ; W
  32. n_period    EQU    16 ; W
  33. n_finetune    EQU    18 ; B
  34. n_volume    EQU    19 ; B
  35. n_dmabit    EQU    20 ; W
  36. n_toneportdirec    EQU    22 ; B
  37. n_toneportspeed    EQU    23 ; B
  38. n_wantedperiod    EQU    24 ; W
  39. n_vibratocmd    EQU    26 ; B
  40. n_vibratopos    EQU    27 ; B
  41. n_tremolocmd    EQU    28 ; B
  42. n_tremolopos    EQU    29 ; B
  43. n_wavecontrol    EQU    30 ; B
  44. n_glissfunk    EQU    31 ; B
  45. n_sampleoffset    EQU    32 ; B
  46. n_pattpos    EQU    33 ; B
  47. n_loopcount    EQU    34 ; B
  48. n_funkoffset    EQU    35 ; B
  49. n_wavestart    EQU    36 ; L
  50. n_reallength    EQU    40 ; W
  51.  
  52. mt_init    
  53. ;    Lea    Mt_data,A0
  54.     MOVE.L    A0,mt_SongDataPtr
  55.     MOVE.L    A0,A1
  56.     LEA    952(A1),A1
  57.     MOVEQ    #127,D0
  58.     MOVEQ    #0,D1
  59. mtloop    MOVE.L    D1,D2
  60.     SUBQ.W    #1,D0
  61. mtloop2    MOVE.B    (A1)+,D1
  62.     CMP.B    D2,D1
  63.     BGT.S    mtloop
  64.     DBRA    D0,mtloop2
  65.     ADDQ.B    #1,D2
  66.             
  67.     LEA    mt_SampleStarts(PC),A1
  68.     ASL.L    #8,D2
  69.     ASL.L    #2,D2
  70.     ADD.L    #1084,D2
  71.     ADD.L    A0,D2
  72.     MOVE.L    D2,A2
  73.     MOVEQ    #30,D0
  74. mtloop3    CLR.L    (A2)
  75.     MOVE.L    A2,(A1)+
  76.     MOVEQ    #0,D1
  77.     MOVE.W    42(A0),D1
  78.     ASL.L    #1,D1
  79.     ADD.L    D1,A2
  80.     ADD.L    #30,A0
  81.     DBRA    D0,mtloop3
  82.  
  83.     OR.B    #2,$BFE001
  84.     MOVE.B    #6,mt_speed
  85.     CLR.B    mt_counter
  86.     CLR.B    mt_SongPos
  87.     CLR.W    mt_PatternPos
  88. mt_end    CLR.W    $DFF0A8
  89.     CLR.W    $DFF0B8
  90.     CLR.W    $DFF0C8
  91.     CLR.W    $DFF0D8
  92.     MOVE.W    #$F,$DFF096
  93.     RTS
  94.  
  95. mt_music
  96.     MOVEM.L    D0-D4/A0-A6,-(SP)
  97.     sub.w #$022,Equalizer1
  98.     bpl Eq1Ok
  99.     move.w #0,Equalizer1
  100. Eq1Ok:
  101.     sub.w #$020,Equalizer2
  102.     bpl Eq2Ok
  103.     move.w #0,Equalizer2
  104. Eq2Ok:
  105.     sub.w #$222,Equalizer3
  106.     bpl Eq3Ok
  107.     move.w #0,Equalizer3
  108. Eq3Ok:
  109.     sub.w #$202,Equalizer4
  110.     bpl Eq4Ok
  111.     move.w #0,Equalizer4
  112. Eq4Ok:
  113.  
  114.  
  115.  
  116.     ADDQ.B    #1,mt_counter
  117.     MOVE.B    mt_counter(PC),D0
  118.     CMP.B    mt_speed(PC),D0
  119.     BLO.S    mt_NoNewNote
  120.     CLR.B    mt_counter
  121.     TST.B    mt_PattDelTime2
  122.     BEQ.S    mt_GetNewNote
  123.     BSR.S    mt_NoNewAllChannels
  124.     BRA    mt_dskip
  125.  
  126. mt_NoNewNote
  127.     BSR.S    mt_NoNewAllChannels
  128.     BRA    mt_NoNewPosYet
  129.  
  130. mt_NoNewAllChannels
  131.     LEA    $DFF0A0,A5
  132.     LEA    mt_chan1temp(PC),A6
  133.     BSR    mt_CheckEfx
  134.     LEA    $DFF0B0,A5
  135.     LEA    mt_chan2temp(PC),A6
  136.     BSR    mt_CheckEfx
  137.     LEA    $DFF0C0,A5
  138.     LEA    mt_chan3temp(PC),A6
  139.     BSR    mt_CheckEfx
  140.     LEA    $DFF0D0,A5
  141.     LEA    mt_chan4temp(PC),A6
  142.     BRA    mt_CheckEfx
  143.  
  144. mt_GetNewNote
  145.     MOVE.L    mt_SongDataPtr(PC),A0
  146.     LEA    12(A0),A3
  147.     LEA    952(A0),A2    ;pattpo
  148.     LEA    1084(A0),A0    ;patterndata
  149.     MOVEQ    #0,D0
  150.     MOVEQ    #0,D1
  151.     MOVE.B    mt_SongPos(PC),D0
  152.     MOVE.B    (A2,D0.W),D1
  153. ;this is is a note steve
  154.     ASL.L    #8,D1
  155.     ASL.L    #2,D1
  156.     ADD.W    mt_PatternPos(PC),D1
  157.     CLR.W    mt_DMACONtemp
  158.  
  159.     LEA    $DFF0A0,A5
  160.     LEA    mt_chan1temp(PC),A6
  161.     BSR.S    mt_PlayVoice
  162.     LEA    $DFF0B0,A5
  163.     LEA    mt_chan2temp(PC),A6
  164.     BSR.S    mt_PlayVoice
  165.     LEA    $DFF0C0,A5
  166.     LEA    mt_chan3temp(PC),A6
  167.     BSR.S    mt_PlayVoice
  168.     LEA    $DFF0D0,A5
  169.     LEA    mt_chan4temp(PC),A6
  170.     BSR.S    mt_PlayVoice
  171.     BRA    mt_SetDMA
  172.  
  173. mt_PlayVoice
  174.     TST.L    (A6)
  175.     BNE.S    mt_plvskip
  176.     BSR    mt_PerNop
  177. mt_plvskip
  178.     MOVE.L    (A0,D1.L),(A6)
  179.     ADDQ.L    #4,D1
  180.     MOVEQ    #0,D2
  181.     MOVE.B    n_cmd(A6),D2
  182.     AND.B    #$F0,D2
  183.     LSR.B    #4,D2
  184.     MOVE.B    (A6),D0
  185.     AND.B    #$F0,D0
  186.     OR.B    D0,D2
  187.     TST.B    D2
  188.     BEQ    mt_SetRegs
  189.     MOVEQ    #0,D3
  190.     LEA    mt_SampleStarts(PC),A1
  191.     MOVE    D2,D4
  192.     SUBQ.L    #1,D2
  193.     ASL.L    #2,D2
  194.  
  195.  
  196. ; sub #22,d4 here should be sample number I think
  197. ;
  198. ; then the following compares will tell you the channel
  199. ;
  200.  
  201.     cmp.l #$dff0a0,a5
  202.     bne NoEqu1
  203.     move.w #$0ff,Equalizer1
  204.     move.w d4,chan1
  205. NoEqu1:
  206.     cmp.l #$dff0b0,a5
  207.     bne NoEqu2
  208.     move.w #$f0,Equalizer2
  209.     move.w d4,chan2
  210. NoEqu2:
  211.     cmp.l #$dff0c0,a5
  212.     bne NoEqu3
  213.     move.w #$fFF,Equalizer3
  214.     move.w d4,chan3
  215. NoEqu3:
  216.     cmp.l #$dff0d0,a5
  217.     bne NoEqu4
  218.     move.w #$f0f,Equalizer4
  219.     move.w d4,chan4
  220. NoEqu4:
  221.  
  222.  
  223.     MULU    #30,D4
  224.     MOVE.L    (A1,D2.L),n_start(A6)
  225.     MOVE.W    (A3,D4.L),n_length(A6)
  226.     MOVE.W    (A3,D4.L),n_reallength(A6)
  227.     MOVE.B    2(A3,D4.L),n_finetune(A6)
  228.     MOVE.B    3(A3,D4.L),n_volume(A6)
  229.     MOVE.W    4(A3,D4.L),D3 ; Get repeat
  230.     TST.W    D3
  231.     BEQ.S    mt_NoLoop
  232.     MOVE.L    n_start(A6),D2    ; Get start
  233.     ASL.W    #1,D3
  234.     ADD.L    D3,D2        ; Add repeat
  235.     MOVE.L    D2,n_loopstart(A6)
  236.     MOVE.L    D2,n_wavestart(A6)
  237.     MOVE.W    4(A3,D4.L),D0    ; Get repeat
  238.     ADD.W    6(A3,D4.L),D0    ; Add replen
  239.     MOVE.W    D0,n_length(A6)
  240.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  241.     MOVEQ    #0,D0
  242.     MOVE.B    n_volume(A6),D0
  243.     MOVE.W    D0,8(A5)    ; Set volume
  244.     BRA.S    mt_SetRegs
  245.  
  246. mt_NoLoop
  247.     MOVE.L    n_start(A6),D2
  248.     ADD.L    D3,D2
  249.     MOVE.L    D2,n_loopstart(A6)
  250.     MOVE.L    D2,n_wavestart(A6)
  251.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  252.     MOVEQ    #0,D0
  253.     MOVE.B    n_volume(A6),D0
  254.     MOVE.W    D0,8(A5)    ; Set volume
  255. mt_SetRegs
  256.     MOVE.W    (A6),D0
  257.     AND.W    #$0FFF,D0
  258.     BEQ    mt_CheckMoreEfx    ; If no note
  259.     MOVE.W    2(A6),D0
  260.     AND.W    #$0FF0,D0
  261.     CMP.W    #$0E50,D0
  262.     BEQ.S    mt_DoSetFineTune
  263.     MOVE.B    2(A6),D0
  264.     AND.B    #$0F,D0
  265.     CMP.B    #3,D0    ; TonePortamento
  266.     BEQ.S    mt_ChkTonePorta
  267.     CMP.B    #5,D0
  268.     BEQ.S    mt_ChkTonePorta
  269.     CMP.B    #9,D0    ; Sample Offset
  270.     BNE.S    mt_SetPeriod
  271.     BSR    mt_CheckMoreEfx
  272.     BRA.S    mt_SetPeriod
  273.  
  274. mt_DoSetFineTune
  275.     BSR    mt_SetFineTune
  276.     BRA.S    mt_SetPeriod
  277.  
  278. mt_ChkTonePorta
  279.     BSR    mt_SetTonePorta
  280.     BRA    mt_CheckMoreEfx
  281.  
  282. mt_SetPeriod
  283.     MOVEM.L    D0-D1/A0-A1,-(SP)
  284.     MOVE.W    (A6),D1
  285.     AND.W    #$0FFF,D1
  286.     LEA    mt_PeriodTable(PC),A1
  287.     MOVEQ    #0,D0
  288.     MOVEQ    #36,D7
  289. mt_ftuloop
  290.     CMP.W    (A1,D0.W),D1
  291.     BHS.S    mt_ftufound
  292.     ADDQ.L    #2,D0
  293.     DBRA    D7,mt_ftuloop
  294. mt_ftufound
  295.     MOVEQ    #0,D1
  296.     MOVE.B    n_finetune(A6),D1
  297.     MULU    #36*2,D1
  298.     ADD.L    D1,A1
  299.     MOVE.W    (A1,D0.W),n_period(A6)
  300.     MOVEM.L    (SP)+,D0-D1/A0-A1
  301.  
  302.     MOVE.W    2(A6),D0
  303.     AND.W    #$0FF0,D0
  304.     CMP.W    #$0ED0,D0 ; Notedelay
  305.     BEQ    mt_CheckMoreEfx
  306.  
  307.     MOVE.W    n_dmabit(A6),$DFF096
  308.     BTST    #2,n_wavecontrol(A6)
  309.     BNE.S    mt_vibnoc
  310.     CLR.B    n_vibratopos(A6)
  311. mt_vibnoc
  312.     BTST    #6,n_wavecontrol(A6)
  313.     BNE.S    mt_trenoc
  314.     CLR.B    n_tremolopos(A6)
  315. mt_trenoc
  316.     MOVE.L    n_start(A6),(A5)    ; Set start
  317.     MOVE.W    n_length(A6),4(A5)    ; Set length
  318.     MOVE.W    n_period(A6),D0
  319.     MOVE.W    D0,6(A5)        ; Set period
  320.     MOVE.W    n_dmabit(A6),D0
  321.     OR.W    D0,mt_DMACONtemp
  322.     BRA    mt_CheckMoreEfx
  323.  
  324. mt_SetDMA
  325.     MOVE.W    #DMAwait,D0
  326. mt_WaitDMA
  327.     DBRA    D0,mt_WaitDMA
  328.     MOVE.W    mt_DMACONtemp(PC),D0
  329.     OR.W    #$8000,D0
  330.     MOVE.W    D0,$DFF096
  331.     MOVE.W    #DMAwait,D0
  332. mt_WaitDMA2
  333.     DBRA    D0,mt_WaitDMA2
  334.  
  335.     LEA    $DFF000,A5
  336.     LEA    mt_chan4temp(PC),A6
  337.     MOVE.L    n_loopstart(A6),$D0(A5)
  338.     MOVE.W    n_replen(A6),$D4(A5)
  339.     LEA    mt_chan3temp(PC),A6
  340.     MOVE.L    n_loopstart(A6),$C0(A5)
  341.     MOVE.W    n_replen(A6),$C4(A5)
  342.     LEA    mt_chan2temp(PC),A6
  343.     MOVE.L    n_loopstart(A6),$B0(A5)
  344.     MOVE.W    n_replen(A6),$B4(A5)
  345.     LEA    mt_chan1temp(PC),A6
  346.     MOVE.L    n_loopstart(A6),$A0(A5)
  347.     MOVE.W    n_replen(A6),$A4(A5)
  348.  
  349. mt_dskip
  350.     ADD.W    #16,mt_PatternPos
  351.     MOVE.B    mt_PattDelTime,D0
  352.     BEQ.S    mt_dskc
  353.     MOVE.B    D0,mt_PattDelTime2
  354.     CLR.B    mt_PattDelTime
  355. mt_dskc    TST.B    mt_PattDelTime2
  356.     BEQ.S    mt_dska
  357.     SUBQ.B    #1,mt_PattDelTime2
  358.     BEQ.S    mt_dska
  359.     SUB.W    #16,mt_PatternPos
  360. mt_dska    TST.B    mt_PBreakFlag
  361.     BEQ.S    mt_nnpysk
  362.     SF    mt_PBreakFlag
  363.     MOVEQ    #0,D0
  364.     MOVE.B    mt_PBreakPos(PC),D0
  365.     CLR.B    mt_PBreakPos
  366.     LSL.W    #4,D0
  367.     MOVE.W    D0,mt_PatternPos
  368. mt_nnpysk
  369.     CMP.W    #1024,mt_PatternPos
  370.     BLO.S    mt_NoNewPosYet
  371. mt_NextPosition    
  372.     MOVEQ    #0,D0
  373.     MOVE.B    mt_PBreakPos(PC),D0
  374.     LSL.W    #4,D0
  375.     MOVE.W    D0,mt_PatternPos
  376.     CLR.B    mt_PBreakPos
  377.     CLR.B    mt_PosJumpFlag
  378.     ADDQ.B    #1,mt_SongPos
  379.     AND.B    #$7F,mt_SongPos
  380.     MOVE.B    mt_SongPos(PC),D1
  381.     MOVE.L    mt_SongDataPtr(PC),A0
  382.     CMP.B    950(A0),D1
  383.     BLO.S    mt_NoNewPosYet
  384.     CLR.B    mt_SongPos
  385. mt_NoNewPosYet    
  386.     TST.B    mt_PosJumpFlag
  387.     BNE.S    mt_NextPosition
  388.     MOVEM.L    (SP)+,D0-D4/A0-A6
  389.     RTS
  390.  
  391. mt_CheckEfx
  392.     BSR    mt_UpdateFunk
  393.     MOVE.W    n_cmd(A6),D0
  394.     AND.W    #$0FFF,D0
  395.     BEQ.S    mt_PerNop
  396.     MOVE.B    n_cmd(A6),D0
  397.     AND.B    #$0F,D0
  398.     BEQ.S    mt_Arpeggio
  399.     CMP.B    #1,D0
  400.     BEQ    mt_PortaUp
  401.     CMP.B    #2,D0
  402.     BEQ    mt_PortaDown
  403.     CMP.B    #3,D0
  404.     BEQ    mt_TonePortamento
  405.     CMP.B    #4,D0
  406.     BEQ    mt_Vibrato
  407.     CMP.B    #5,D0
  408.     BEQ    mt_TonePlusVolSlide
  409.     CMP.B    #6,D0
  410.     BEQ    mt_VibratoPlusVolSlide
  411.     CMP.B    #$E,D0
  412.     BEQ    mt_E_Commands
  413. SetBack    MOVE.W    n_period(A6),6(A5)
  414.     CMP.B    #7,D0
  415.     BEQ    mt_Tremolo
  416.     CMP.B    #$A,D0
  417.     BEQ    mt_VolumeSlide
  418. mt_Return2
  419.     RTS
  420.  
  421. mt_PerNop
  422.     MOVE.W    n_period(A6),6(A5)
  423.     RTS
  424.  
  425. mt_Arpeggio
  426.     MOVEQ    #0,D0
  427.     MOVE.B    mt_counter(PC),D0
  428.     DIVS    #3,D0
  429.     SWAP    D0
  430.     CMP.W    #0,D0
  431.     BEQ.S    mt_Arpeggio2
  432.     CMP.W    #2,D0
  433.     BEQ.S    mt_Arpeggio1
  434.     MOVEQ    #0,D0
  435.     MOVE.B    n_cmdlo(A6),D0
  436.     LSR.B    #4,D0
  437.     BRA.S    mt_Arpeggio3
  438.  
  439. mt_Arpeggio1
  440.     MOVEQ    #0,D0
  441.     MOVE.B    n_cmdlo(A6),D0
  442.     AND.B    #15,D0
  443.     BRA.S    mt_Arpeggio3
  444.  
  445. mt_Arpeggio2
  446.     MOVE.W    n_period(A6),D2
  447.     BRA.S    mt_Arpeggio4
  448.  
  449. mt_Arpeggio3
  450.     ASL.W    #1,D0
  451.     MOVEQ    #0,D1
  452.     MOVE.B    n_finetune(A6),D1
  453.     MULU    #36*2,D1
  454.     LEA    mt_PeriodTable(PC),A0
  455.     ADD.L    D1,A0
  456.     MOVEQ    #0,D1
  457.     MOVE.W    n_period(A6),D1
  458.     MOVEQ    #36,D7
  459. mt_arploop
  460.     MOVE.W    (A0,D0.W),D2
  461.     CMP.W    (A0),D1
  462.     BHS.S    mt_Arpeggio4
  463.     ADDQ.L    #2,A0
  464.     DBRA    D7,mt_arploop
  465.     RTS
  466.  
  467. mt_Arpeggio4
  468.     MOVE.W    D2,6(A5)
  469.     RTS
  470.  
  471. mt_FinePortaUp
  472.     TST.B    mt_counter
  473.     BNE.S    mt_Return2
  474.     MOVE.B    #$0F,mt_LowMask
  475. mt_PortaUp
  476.     MOVEQ    #0,D0
  477.     MOVE.B    n_cmdlo(A6),D0
  478.     AND.B    mt_LowMask(PC),D0
  479.     MOVE.B    #$FF,mt_LowMask
  480.     SUB.W    D0,n_period(A6)
  481.     MOVE.W    n_period(A6),D0
  482.     AND.W    #$0FFF,D0
  483.     CMP.W    #113,D0
  484.     BPL.S    mt_PortaUskip
  485.     AND.W    #$F000,n_period(A6)
  486.     OR.W    #113,n_period(A6)
  487. mt_PortaUskip
  488.     MOVE.W    n_period(A6),D0
  489.     AND.W    #$0FFF,D0
  490.     MOVE.W    D0,6(A5)
  491.     RTS    
  492.  
  493. mt_FinePortaDown
  494.     TST.B    mt_counter
  495.     BNE    mt_Return2
  496.     MOVE.B    #$0F,mt_LowMask
  497. mt_PortaDown
  498.     CLR.W    D0
  499.     MOVE.B    n_cmdlo(A6),D0
  500.     AND.B    mt_LowMask(PC),D0
  501.     MOVE.B    #$FF,mt_LowMask
  502.     ADD.W    D0,n_period(A6)
  503.     MOVE.W    n_period(A6),D0
  504.     AND.W    #$0FFF,D0
  505.     CMP.W    #856,D0
  506.     BMI.S    mt_PortaDskip
  507.     AND.W    #$F000,n_period(A6)
  508.     OR.W    #856,n_period(A6)
  509. mt_PortaDskip
  510.     MOVE.W    n_period(A6),D0
  511.     AND.W    #$0FFF,D0
  512.     MOVE.W    D0,6(A5)
  513.     RTS
  514.  
  515. mt_SetTonePorta
  516.     MOVE.L    A0,-(SP)
  517.     MOVE.W    (A6),D2
  518.     AND.W    #$0FFF,D2
  519.     MOVEQ    #0,D0
  520.     MOVE.B    n_finetune(A6),D0
  521.     MULU    #37*2,D0
  522.     LEA    mt_PeriodTable(PC),A0
  523.     ADD.L    D0,A0
  524.     MOVEQ    #0,D0
  525. mt_StpLoop
  526.     CMP.W    (A0,D0.W),D2
  527.     BHS.S    mt_StpFound
  528.     ADDQ.W    #2,D0
  529.     CMP.W    #37*2,D0
  530.     BLO.S    mt_StpLoop
  531.     MOVEQ    #35*2,D0
  532. mt_StpFound
  533.     MOVE.B    n_finetune(A6),D2
  534.     AND.B    #8,D2
  535.     BEQ.S    mt_StpGoss
  536.     TST.W    D0
  537.     BEQ.S    mt_StpGoss
  538.     SUBQ.W    #2,D0
  539. mt_StpGoss
  540.     MOVE.W    (A0,D0.W),D2
  541.     MOVE.L    (SP)+,A0
  542.     MOVE.W    D2,n_wantedperiod(A6)
  543.     MOVE.W    n_period(A6),D0
  544.     CLR.B    n_toneportdirec(A6)
  545.     CMP.W    D0,D2
  546.     BEQ.S    mt_ClearTonePorta
  547.     BGE    mt_Return2
  548.     MOVE.B    #1,n_toneportdirec(A6)
  549.     RTS
  550.  
  551. mt_ClearTonePorta
  552.     CLR.W    n_wantedperiod(A6)
  553.     RTS
  554.  
  555. mt_TonePortamento
  556.     MOVE.B    n_cmdlo(A6),D0
  557.     BEQ.S    mt_TonePortNoChange
  558.     MOVE.B    D0,n_toneportspeed(A6)
  559.     CLR.B    n_cmdlo(A6)
  560. mt_TonePortNoChange
  561.     TST.W    n_wantedperiod(A6)
  562.     BEQ    mt_Return2
  563.     MOVEQ    #0,D0
  564.     MOVE.B    n_toneportspeed(A6),D0
  565.     TST.B    n_toneportdirec(A6)
  566.     BNE.S    mt_TonePortaUp
  567. mt_TonePortaDown
  568.     ADD.W    D0,n_period(A6)
  569.     MOVE.W    n_wantedperiod(A6),D0
  570.     CMP.W    n_period(A6),D0
  571.     BGT.S    mt_TonePortaSetPer
  572.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  573.     CLR.W    n_wantedperiod(A6)
  574.     BRA.S    mt_TonePortaSetPer
  575.  
  576. mt_TonePortaUp
  577.     SUB.W    D0,n_period(A6)
  578.     MOVE.W    n_wantedperiod(A6),D0
  579.     CMP.W    n_period(A6),D0
  580.     BLT.S    mt_TonePortaSetPer
  581.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  582.     CLR.W    n_wantedperiod(A6)
  583.  
  584. mt_TonePortaSetPer
  585.     MOVE.W    n_period(A6),D2
  586.     MOVE.B    n_glissfunk(A6),D0
  587.     AND.B    #$0F,D0
  588.     BEQ.S    mt_GlissSkip
  589.     MOVEQ    #0,D0
  590.     MOVE.B    n_finetune(A6),D0
  591.     MULU    #36*2,D0
  592.     LEA    mt_PeriodTable(PC),A0
  593.     ADD.L    D0,A0
  594.     MOVEQ    #0,D0
  595. mt_GlissLoop
  596.     CMP.W    (A0,D0.W),D2
  597.     BHS.S    mt_GlissFound
  598.     ADDQ.W    #2,D0
  599.     CMP.W    #36*2,D0
  600.     BLO.S    mt_GlissLoop
  601.     MOVEQ    #35*2,D0
  602. mt_GlissFound
  603.     MOVE.W    (A0,D0.W),D2
  604. mt_GlissSkip
  605.     MOVE.W    D2,6(A5) ; Set period
  606.     RTS
  607.  
  608. mt_Vibrato
  609.     MOVE.B    n_cmdlo(A6),D0
  610.     BEQ.S    mt_Vibrato2
  611.     MOVE.B    n_vibratocmd(A6),D2
  612.     AND.B    #$0F,D0
  613.     BEQ.S    mt_vibskip
  614.     AND.B    #$F0,D2
  615.     OR.B    D0,D2
  616. mt_vibskip
  617.     MOVE.B    n_cmdlo(A6),D0
  618.     AND.B    #$F0,D0
  619.     BEQ.S    mt_vibskip2
  620.     AND.B    #$0F,D2
  621.     OR.B    D0,D2
  622. mt_vibskip2
  623.     MOVE.B    D2,n_vibratocmd(A6)
  624. mt_Vibrato2
  625.     MOVE.B    n_vibratopos(A6),D0
  626.     LEA    mt_VibratoTable(PC),A4
  627.     LSR.W    #2,D0
  628.     AND.W    #$001F,D0
  629.     MOVEQ    #0,D2
  630.     MOVE.B    n_wavecontrol(A6),D2
  631.     AND.B    #$03,D2
  632.     BEQ.S    mt_vib_sine
  633.     LSL.B    #3,D0
  634.     CMP.B    #1,D2
  635.     BEQ.S    mt_vib_rampdown
  636.     MOVE.B    #255,D2
  637.     BRA.S    mt_vib_set
  638. mt_vib_rampdown
  639.     TST.B    n_vibratopos(A6)
  640.     BPL.S    mt_vib_rampdown2
  641.     MOVE.B    #255,D2
  642.     SUB.B    D0,D2
  643.     BRA.S    mt_vib_set
  644. mt_vib_rampdown2
  645.     MOVE.B    D0,D2
  646.     BRA.S    mt_vib_set
  647. mt_vib_sine
  648.     MOVE.B    0(A4,D0.W),D2
  649. mt_vib_set
  650.     MOVE.B    n_vibratocmd(A6),D0
  651.     AND.W    #15,D0
  652.     MULU    D0,D2
  653.     LSR.W    #7,D2
  654.     MOVE.W    n_period(A6),D0
  655.     TST.B    n_vibratopos(A6)
  656.     BMI.S    mt_VibratoNeg
  657.     ADD.W    D2,D0
  658.     BRA.S    mt_Vibrato3
  659. mt_VibratoNeg
  660.     SUB.W    D2,D0
  661. mt_Vibrato3
  662.     MOVE.W    D0,6(A5)
  663.     MOVE.B    n_vibratocmd(A6),D0
  664.     LSR.W    #2,D0
  665.     AND.W    #$003C,D0
  666.     ADD.B    D0,n_vibratopos(A6)
  667.     RTS
  668.  
  669. mt_TonePlusVolSlide
  670.     BSR    mt_TonePortNoChange
  671.     BRA    mt_VolumeSlide
  672.  
  673. mt_VibratoPlusVolSlide
  674.     BSR.S    mt_Vibrato2
  675.     BRA    mt_VolumeSlide
  676.  
  677. mt_Tremolo
  678.     MOVE.B    n_cmdlo(A6),D0
  679.     BEQ.S    mt_Tremolo2
  680.     MOVE.B    n_tremolocmd(A6),D2
  681.     AND.B    #$0F,D0
  682.     BEQ.S    mt_treskip
  683.     AND.B    #$F0,D2
  684.     OR.B    D0,D2
  685. mt_treskip
  686.     MOVE.B    n_cmdlo(A6),D0
  687.     AND.B    #$F0,D0
  688.     BEQ.S    mt_treskip2
  689.     AND.B    #$0F,D2
  690.     OR.B    D0,D2
  691. mt_treskip2
  692.     MOVE.B    D2,n_tremolocmd(A6)
  693. mt_Tremolo2
  694.     MOVE.B    n_tremolopos(A6),D0
  695.     LEA    mt_VibratoTable(PC),A4
  696.     LSR.W    #2,D0
  697.     AND.W    #$001F,D0
  698.     MOVEQ    #0,D2
  699.     MOVE.B    n_wavecontrol(A6),D2
  700.     LSR.B    #4,D2
  701.     AND.B    #$03,D2
  702.     BEQ.S    mt_tre_sine
  703.     LSL.B    #3,D0
  704.     CMP.B    #1,D2
  705.     BEQ.S    mt_tre_rampdown
  706.     MOVE.B    #255,D2
  707.     BRA.S    mt_tre_set
  708. mt_tre_rampdown
  709.     TST.B    n_vibratopos(A6)
  710.     BPL.S    mt_tre_rampdown2
  711.     MOVE.B    #255,D2
  712.     SUB.B    D0,D2
  713.     BRA.S    mt_tre_set
  714. mt_tre_rampdown2
  715.     MOVE.B    D0,D2
  716.     BRA.S    mt_tre_set
  717. mt_tre_sine
  718.     MOVE.B    0(A4,D0.W),D2
  719. mt_tre_set
  720.     MOVE.B    n_tremolocmd(A6),D0
  721.     AND.W    #15,D0
  722.     MULU    D0,D2
  723.     LSR.W    #6,D2
  724.     MOVEQ    #0,D0
  725.     MOVE.B    n_volume(A6),D0
  726.     TST.B    n_tremolopos(A6)
  727.     BMI.S    mt_TremoloNeg
  728.     ADD.W    D2,D0
  729.     BRA.S    mt_Tremolo3
  730. mt_TremoloNeg
  731.     SUB.W    D2,D0
  732. mt_Tremolo3
  733.     BPL.S    mt_TremoloSkip
  734.     CLR.W    D0
  735. mt_TremoloSkip
  736.     CMP.W    #$40,D0
  737.     BLS.S    mt_TremoloOk
  738.     MOVE.W    #$40,D0
  739. mt_TremoloOk
  740.     MOVE.W    D0,8(A5)
  741.     MOVE.B    n_tremolocmd(A6),D0
  742.     LSR.W    #2,D0
  743.     AND.W    #$003C,D0
  744.     ADD.B    D0,n_tremolopos(A6)
  745.     RTS
  746.  
  747. mt_SampleOffset
  748.     MOVEQ    #0,D0
  749.     MOVE.B    n_cmdlo(A6),D0
  750.     BEQ.S    mt_sononew
  751.     MOVE.B    D0,n_sampleoffset(A6)
  752. mt_sononew
  753.     MOVE.B    n_sampleoffset(A6),D0
  754.     LSL.W    #7,D0
  755.     CMP.W    n_length(A6),D0
  756.     BGE.S    mt_sofskip
  757.     SUB.W    D0,n_length(A6)
  758.     LSL.W    #1,D0
  759.     ADD.L    D0,n_start(A6)
  760.     RTS
  761. mt_sofskip
  762.     MOVE.W    #$0001,n_length(A6)
  763.     RTS
  764.  
  765. mt_VolumeSlide
  766.     MOVEQ    #0,D0
  767.     MOVE.B    n_cmdlo(A6),D0
  768.     LSR.B    #4,D0
  769.     TST.B    D0
  770.     BEQ.S    mt_VolSlideDown
  771. mt_VolSlideUp
  772.     ADD.B    D0,n_volume(A6)
  773.     CMP.B    #$40,n_volume(A6)
  774.     BMI.S    mt_vsuskip
  775.     MOVE.B    #$40,n_volume(A6)
  776. mt_vsuskip
  777.     MOVE.B    n_volume(A6),D0
  778.     MOVE.W    D0,8(A5)
  779.     RTS
  780.  
  781. mt_VolSlideDown
  782.     MOVEQ    #0,D0
  783.     MOVE.B    n_cmdlo(A6),D0
  784.     AND.B    #$0F,D0
  785. mt_VolSlideDown2
  786.     SUB.B    D0,n_volume(A6)
  787.     BPL.S    mt_vsdskip
  788.     CLR.B    n_volume(A6)
  789. mt_vsdskip
  790.     MOVE.B    n_volume(A6),D0
  791.     MOVE.W    D0,8(A5)
  792.     RTS
  793.  
  794. mt_PositionJump
  795.     MOVE.B    n_cmdlo(A6),D0
  796.     SUBQ.B    #1,D0
  797.     MOVE.B    D0,mt_SongPos
  798. mt_pj2    CLR.B    mt_PBreakPos
  799.     ST     mt_PosJumpFlag
  800.     RTS
  801.  
  802. mt_VolumeChange
  803.     MOVEQ    #0,D0
  804.     MOVE.B    n_cmdlo(A6),D0
  805.     CMP.B    #$40,D0
  806.     BLS.S    mt_VolumeOk
  807.     MOVEQ    #$40,D0
  808. mt_VolumeOk
  809.     MOVE.B    D0,n_volume(A6)
  810.     MOVE.W    D0,8(A5)
  811.     RTS
  812.  
  813. mt_PatternBreak
  814.     MOVEQ    #0,D0
  815.     MOVE.B    n_cmdlo(A6),D0
  816.     MOVE.L    D0,D2
  817.     LSR.B    #4,D0
  818.     MULU    #10,D0
  819.     AND.B    #$0F,D2
  820.     ADD.B    D2,D0
  821.     CMP.B    #63,D0
  822.     BHI.S    mt_pj2
  823.     MOVE.B    D0,mt_PBreakPos
  824.     ST    mt_PosJumpFlag
  825.     RTS
  826.  
  827. mt_SetSpeed
  828.     MOVE.B    3(A6),D0
  829.     BEQ    mt_Return2
  830.     CLR.B    mt_counter
  831.     MOVE.B    D0,mt_speed
  832.     RTS
  833.  
  834. mt_CheckMoreEfx
  835.     BSR    mt_UpdateFunk
  836.     MOVE.B    2(A6),D0
  837.     AND.B    #$0F,D0
  838.     CMP.B    #$9,D0
  839.     BEQ    mt_SampleOffset
  840.     CMP.B    #$B,D0
  841.     BEQ    mt_PositionJump
  842.     CMP.B    #$D,D0
  843.     BEQ.S    mt_PatternBreak
  844.     CMP.B    #$E,D0
  845.     BEQ.S    mt_E_Commands
  846.     CMP.B    #$F,D0
  847.     BEQ.S    mt_SetSpeed
  848.     CMP.B    #$C,D0
  849.     BEQ    mt_VolumeChange
  850.     BRA    mt_PerNop
  851.  
  852. mt_E_Commands
  853.     MOVE.B    n_cmdlo(A6),D0
  854.     AND.B    #$F0,D0
  855.     LSR.B    #4,D0
  856.     BEQ.S    mt_FilterOnOff
  857.     CMP.B    #1,D0
  858.     BEQ    mt_FinePortaUp
  859.     CMP.B    #2,D0
  860.     BEQ    mt_FinePortaDown
  861.     CMP.B    #3,D0
  862.     BEQ.S    mt_SetGlissControl
  863.     CMP.B    #4,D0
  864.     BEQ    mt_SetVibratoControl
  865.     CMP.B    #5,D0
  866.     BEQ    mt_SetFineTune
  867.     CMP.B    #6,D0
  868.     BEQ    mt_JumpLoop
  869.     CMP.B    #7,D0
  870.     BEQ    mt_SetTremoloControl
  871.     CMP.B    #9,D0
  872.     BEQ    mt_RetrigNote
  873.     CMP.B    #$A,D0
  874.     BEQ    mt_VolumeFineUp
  875.     CMP.B    #$B,D0
  876.     BEQ    mt_VolumeFineDown
  877.     CMP.B    #$C,D0
  878.     BEQ    mt_NoteCut
  879.     CMP.B    #$D,D0
  880.     BEQ    mt_NoteDelay
  881.     CMP.B    #$E,D0
  882.     BEQ    mt_PatternDelay
  883.     CMP.B    #$F,D0
  884.     BEQ    mt_FunkIt
  885.     RTS
  886.  
  887. mt_FilterOnOff
  888.     MOVE.B    n_cmdlo(A6),D0
  889.     AND.B    #1,D0
  890.     ASL.B    #1,D0
  891.     AND.B    #$FD,$BFE001
  892.     OR.B    D0,$BFE001
  893.     RTS    
  894.  
  895. mt_SetGlissControl
  896.     MOVE.B    n_cmdlo(A6),D0
  897.     AND.B    #$0F,D0
  898.     AND.B    #$F0,n_glissfunk(A6)
  899.     OR.B    D0,n_glissfunk(A6)
  900.     RTS
  901.  
  902. mt_SetVibratoControl
  903.     MOVE.B    n_cmdlo(A6),D0
  904.     AND.B    #$0F,D0
  905.     AND.B    #$F0,n_wavecontrol(A6)
  906.     OR.B    D0,n_wavecontrol(A6)
  907.     RTS
  908.  
  909. mt_SetFineTune
  910.     MOVE.B    n_cmdlo(A6),D0
  911.     AND.B    #$0F,D0
  912.     MOVE.B    D0,n_finetune(A6)
  913.     RTS
  914.  
  915. mt_JumpLoop
  916.     TST.B    mt_counter
  917.     BNE    mt_Return2
  918.     MOVE.B    n_cmdlo(A6),D0
  919.     AND.B    #$0F,D0
  920.     BEQ.S    mt_SetLoop
  921.     TST.B    n_loopcount(A6)
  922.     BEQ.S    mt_jumpcnt
  923.     SUBQ.B    #1,n_loopcount(A6)
  924.     BEQ    mt_Return2
  925. mt_jmploop    MOVE.B    n_pattpos(A6),mt_PBreakPos
  926.     ST    mt_PBreakFlag
  927.     RTS
  928.  
  929. mt_jumpcnt
  930.     MOVE.B    D0,n_loopcount(A6)
  931.     BRA.S    mt_jmploop
  932.  
  933. mt_SetLoop
  934.     MOVE.W    mt_PatternPos(PC),D0
  935.     LSR.W    #4,D0
  936.     MOVE.B    D0,n_pattpos(A6)
  937.     RTS
  938.  
  939. mt_SetTremoloControl
  940.     MOVE.B    n_cmdlo(A6),D0
  941.     AND.B    #$0F,D0
  942.     LSL.B    #4,D0
  943.     AND.B    #$0F,n_wavecontrol(A6)
  944.     OR.B    D0,n_wavecontrol(A6)
  945.     RTS
  946.  
  947. mt_RetrigNote
  948.     MOVE.L    D1,-(SP)
  949.     MOVEQ    #0,D0
  950.     MOVE.B    n_cmdlo(A6),D0
  951.     AND.B    #$0F,D0
  952.     BEQ.S    mt_rtnend
  953.     MOVEQ    #0,D1
  954.     MOVE.B    mt_counter(PC),D1
  955.     BNE.S    mt_rtnskp
  956.     MOVE.W    (A6),D1
  957.     AND.W    #$0FFF,D1
  958.     BNE.S    mt_rtnend
  959.     MOVEQ    #0,D1
  960.     MOVE.B    mt_counter(PC),D1
  961. mt_rtnskp
  962.     DIVU    D0,D1
  963.     SWAP    D1
  964.     TST.W    D1
  965.     BNE.S    mt_rtnend
  966. mt_DoRetrig
  967.     MOVE.W    n_dmabit(A6),$DFF096    ; Channel DMA off
  968.     MOVE.L    n_start(A6),(A5)    ; Set sampledata pointer
  969.     MOVE.W    n_length(A6),4(A5)    ; Set length
  970.     MOVE.W    #DMAwait,D0
  971. mt_rtnloop1
  972.     DBRA    D0,mt_rtnloop1
  973.     MOVE.W    n_dmabit(A6),D0
  974.     BSET    #15,D0
  975.     MOVE.W    D0,$DFF096
  976.     MOVE.W    #DMAwait,D0
  977. mt_rtnloop2
  978.     DBRA    D0,mt_rtnloop2
  979.     MOVE.L    n_loopstart(A6),(A5)
  980.     MOVE.L    n_replen(A6),4(A5)
  981. mt_rtnend
  982.     MOVE.L    (SP)+,D1
  983.     RTS
  984.  
  985. mt_VolumeFineUp
  986.     TST.B    mt_counter
  987.     BNE    mt_Return2
  988.     MOVEQ    #0,D0
  989.     MOVE.B    n_cmdlo(A6),D0
  990.     AND.B    #$F,D0
  991.     BRA    mt_VolSlideUp
  992.  
  993. mt_VolumeFineDown
  994.     TST.B    mt_counter
  995.     BNE    mt_Return2
  996.     MOVEQ    #0,D0
  997.     MOVE.B    n_cmdlo(A6),D0
  998.     AND.B    #$0F,D0
  999.     BRA    mt_VolSlideDown2
  1000.  
  1001. mt_NoteCut
  1002.     MOVEQ    #0,D0
  1003.     MOVE.B    n_cmdlo(A6),D0
  1004.     AND.B    #$0F,D0
  1005.     CMP.B    mt_counter(PC),D0
  1006.     BNE    mt_Return2
  1007.     CLR.B    n_volume(A6)
  1008.     MOVE.W    #0,8(A5)
  1009.     RTS
  1010.  
  1011. mt_NoteDelay
  1012.     MOVEQ    #0,D0
  1013.     MOVE.B    n_cmdlo(A6),D0
  1014.     AND.B    #$0F,D0
  1015.     CMP.B    mt_Counter,D0
  1016.     BNE    mt_Return2
  1017.     MOVE.W    (A6),D0
  1018.     BEQ    mt_Return2
  1019.     MOVE.L    D1,-(SP)
  1020.     BRA    mt_DoRetrig
  1021.  
  1022. mt_PatternDelay
  1023.     TST.B    mt_counter
  1024.     BNE    mt_Return2
  1025.     MOVEQ    #0,D0
  1026.     MOVE.B    n_cmdlo(A6),D0
  1027.     AND.B    #$0F,D0
  1028.     TST.B    mt_PattDelTime2
  1029.     BNE    mt_Return2
  1030.     ADDQ.B    #1,D0
  1031.     MOVE.B    D0,mt_PattDelTime
  1032.     RTS
  1033.  
  1034. mt_FunkIt
  1035.     TST.B    mt_counter
  1036.     BNE    mt_Return2
  1037.     MOVE.B    n_cmdlo(A6),D0
  1038.     AND.B    #$0F,D0
  1039.     LSL.B    #4,D0
  1040.     AND.B    #$0F,n_glissfunk(A6)
  1041.     OR.B    D0,n_glissfunk(A6)
  1042.     TST.B    D0
  1043.     BEQ    mt_Return2
  1044. mt_UpdateFunk
  1045.     MOVEM.L    A0/D1,-(SP)
  1046.     MOVEQ    #0,D0
  1047.     MOVE.B    n_glissfunk(A6),D0
  1048.     LSR.B    #4,D0
  1049.     BEQ.S    mt_funkend
  1050.     LEA    mt_FunkTable(PC),A0
  1051.     MOVE.B    (A0,D0.W),D0
  1052.     ADD.B    D0,n_funkoffset(A6)
  1053.     BTST    #7,n_funkoffset(A6)
  1054.     BEQ.S    mt_funkend
  1055.     CLR.B    n_funkoffset(A6)
  1056.  
  1057.     MOVE.L    n_loopstart(A6),D0
  1058.     MOVEQ    #0,D1
  1059.     MOVE.W    n_replen(A6),D1
  1060.     ADD.L    D1,D0
  1061.     ADD.L    D1,D0
  1062.     MOVE.L    n_wavestart(A6),A0
  1063.     ADDQ.L    #1,A0
  1064.     CMP.L    D0,A0
  1065.     BLO.S    mt_funkok
  1066.     MOVE.L    n_loopstart(A6),A0
  1067. mt_funkok
  1068.     MOVE.L    A0,n_wavestart(A6)
  1069.     MOVEQ    #-1,D0
  1070.     SUB.B    (A0),D0
  1071.     MOVE.B    D0,(A0)
  1072. mt_funkend
  1073.     MOVEM.L    (SP)+,A0/D1
  1074.     RTS
  1075.  
  1076.  
  1077. mt_FunkTable dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
  1078.  
  1079. mt_VibratoTable    
  1080.     dc.b   0, 24, 49, 74, 97,120,141,161
  1081.     dc.b 180,197,212,224,235,244,250,253
  1082.     dc.b 255,253,250,244,235,224,212,197
  1083.     dc.b 180,161,141,120, 97, 74, 49, 24
  1084.  
  1085. mt_PeriodTable
  1086. ; Tuning 0, Normal
  1087.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  1088.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  1089.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113
  1090. ; Tuning 1
  1091.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  1092.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  1093.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113
  1094. ; Tuning 2
  1095.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  1096.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  1097.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112
  1098. ; Tuning 3
  1099.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  1100.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  1101.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111
  1102. ; Tuning 4
  1103.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  1104.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  1105.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110
  1106. ; Tuning 5
  1107.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  1108.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  1109.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109
  1110. ; Tuning 6
  1111.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  1112.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  1113.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109
  1114. ; Tuning 7
  1115.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  1116.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  1117.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108
  1118. ; Tuning -8
  1119.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  1120.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  1121.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120
  1122. ; Tuning -7
  1123.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  1124.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  1125.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119
  1126. ; Tuning -6
  1127.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  1128.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  1129.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118
  1130. ; Tuning -5
  1131.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  1132.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  1133.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118
  1134. ; Tuning -4
  1135.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  1136.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  1137.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117
  1138. ; Tuning -3
  1139.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  1140.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  1141.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116
  1142. ; Tuning -2
  1143.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  1144.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  1145.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115
  1146. ; Tuning -1
  1147.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  1148.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  1149.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114
  1150.  
  1151. mt_chan1temp    dc.l    0,0,0,0,0,$00010000,0,  0,0,0,0
  1152. mt_chan2temp    dc.l    0,0,0,0,0,$00020000,0,  0,0,0,0
  1153. mt_chan3temp    dc.l    0,0,0,0,0,$00040000,0,  0,0,0,0
  1154. mt_chan4temp    dc.l    0,0,0,0,0,$00080000,0,  0,0,0,0
  1155.  
  1156. mt_SampleStarts    dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1157.         dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1158.  
  1159. mt_SongDataPtr    dc.l 0
  1160.  
  1161. mt_speed    dc.b 6
  1162. mt_counter    dc.b 0
  1163. mt_SongPos    dc.b 0
  1164. mt_PBreakPos    dc.b 0
  1165. mt_PosJumpFlag    dc.b 0
  1166. mt_PBreakFlag    dc.b 0
  1167. mt_LowMask    dc.b 0
  1168. mt_PattDelTime    dc.b 0
  1169. mt_PattDelTime2    dc.b 0,0
  1170.  
  1171. mt_PatternPos    dc.w 0
  1172. mt_DMACONtemp    dc.w 0
  1173.  
  1174. Equalizer1:    dc.w 0
  1175. Equalizer2:    dc.w 0
  1176. Equalizer3:    dc.w 0
  1177. Equalizer4:    dc.w 0
  1178. chan1:        dc.w 0
  1179. chan2:        dc.w 0
  1180. chan3:        dc.w 0
  1181. chan4:        dc.w 0
  1182. ;/* End of File */
  1183.